package cn.com.basic.framework.aliyun.oss.download;

import cn.com.basic.framework.aliyun.oss.OSSManager;
import cn.hutool.core.lang.Assert;
import com.aliyun.oss.model.OSSObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author zhuxj
 */
public class StreamDownloader extends Downloader {
    public StreamDownloader(OSSManager ossManager) {
        super(ossManager);
    }

    public String download(String bucketName, String objectName) throws IOException {
        Assert.isTrue(this.ossManager.getOss() != null, "oss client cannot be null");

        StringBuilder sb = new StringBuilder();

        // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
        OSSObject ossObject = this.ossManager.getOss().getObject(bucketName, objectName);

        // 读取文件内容。
        BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
        while (true) {
            String line = reader.readLine();
            if (line == null) break;
            sb.append("\n").append(line);
        }
        // 数据读取完成后，获取的流必须关闭，否则会造成连接泄漏，导致请求无连接可用，程序无法正常工作。
        reader.close();

        return sb.toString();
    }
}
